
let arrays = [[1, 2, 3], [4, 5], [6]];

// https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce
// 一开始是一个空的数组 然后他不断地添加一个个的值
// https://www.w3school.com.cn/jsref/jsref_concat_array.asp
console.log(arrays.reduce((flat, current) => {

    console.log("=======");
    console.log("flat");
    console.log(flat);

    console.log("current");
    console.log(current);
    // 往里面加的时候 都是摊平的

    return flat.concat(current)

}, []));
// [ 1, 2, 3, 4, 5, 6 ]


var _ = require('ramda');

let flat = (arr) => {
    // ramda reduce
    // https://ramda.cn/docs/#reduce
    // 从 arr 数组拿到数字  从[]开始操作 不断的 做一个操作 就是把那些东西不断地往里面放
    //  但是concat 是直接摊平的 这个是特性
    // function reduce<any, any[]>(fn: (acc: any[], elem: any) => any[] | _.Reduced<any[]>, acc: any[], list: readonly any[]): any[] (+2 overloads)
// 
// (method) Array<any>.concat(...items: any[]): any[] (+1 overload)
    return _.reduce((prev, cur) => prev.concat(cur) , [], arr);
    // 从一个 空的数组开始 一直做
    // 是一个数组的话 就把他摊平
}



console.log(flat(arrays))